#include <bits/stdc++.h>
#define ll long long
using namespace std;

const int Maxn=5e4+5;
const int inf=1e9;
int f[Maxn][1005];
char S[Maxn],T[Maxn];
int n,m;
int pi[Maxn];
int nxt[Maxn][26];

inline void upd(int &x,int y){
	x=max(x,y);
}

int main(){
	freopen("neck.in","r",stdin);
	freopen("neck.out","w",stdout);

	scanf("%s",S+1);
	scanf("%s",T+1);
	
	n=strlen(S+1),m=strlen(T+1);
	
	int j=0;
	for(int i=2;i<=m;i++){
		while(T[j+1]!=T[i] and j) j=pi[j];
		if(T[j+1]==T[i]) ++j;
		pi[i]=j; 
	}
	for(int i=1;i<=m;i++){
		int j=pi[i];
		while(1){
			int c=T[j+1]-'a';
			if(!nxt[i][c]) nxt[i][c]=j+1;
			if(!j) break;
			j=pi[j];
		}
	}
	
	for(int i=0;i<=n;i++)
		for(int j=0;j<m;j++)
			f[i][j]=-inf;
	f[0][0]=0;
	for(int i=1;i<=n;i++){
		for(int j=m-1;~j;j--){
			if(S[i]==T[j+1]) upd(f[i][j+1],f[i-1][j]+1);
			else upd(f[i][nxt[j][S[i]-'a']],f[i-1][j]+1);
			upd(f[i][j],f[i-1][j]);
			
		}
	}
	int ans=0;
	for(int i=0;i<m;i++) ans=max(ans,f[n][i]);
	printf("%d",ans);

	return 0;
}
/*
nezhaheaobing
aobing

bbbbbbbbbbbbbbbbbbbb
bb

ababa
ab

*/
